<?php
	error_reporting(0);

	global $cypherPass;
	$cypherPass=$_POST['cypher'];
	// Creacion de la BD con nombre $data
	function create_database($data){
		$sql = 'CREATE DATABASE '. $data;
		if (mysql_query($sql)) {
   			return True;
		} else {
    		return False;
		}
	}
	
	// Haciendo dump de un archivo
	function parse_mysql_dump($url){
    	$file_content = file($url);
    	$query = "";
    	foreach($file_content as $sql_line){
      		if(trim($sql_line) != "" && strpos($sql_line, "--") === false){
        		$query .= $sql_line;
        		if(preg_match("/;[\040]*\$/", $sql_line)){
          			$result = mysql_query($query)or die(mysql_error());
          			$query = "";
        		}
      		}
    	}
  	}
  	
  	// Quitando la linea $line_no del archivo
  	// $filenam
  	function cutline($filename,$line_no=-1) { 

		$strip_return=FALSE; 

		$data=file($filename); 
		$pipe=fopen($filename,'w'); 
		$size=count($data); 

		if($line_no==-1) $skip=$size-1; 
		else $skip=$line_no-1; 

		for($line=0;$line<$size;$line++) 
			if($line!=$skip) 
				fputs($pipe,$data[$line]); 
			else 
				$strip_return=TRUE; 

		return $strip_return; 
	} 
  	
  	// Cambiando los argumentos de las diversas
  	// lineas que se especifican
  	// Archivo: test.txt
  	// 1. $dbname='care2x';
  	// un argumento de ($dbname=>'otrabd'), deberia cambiar care2x por otrabd.
  	function change_line($fh,$lines,$values){
  		
  		$filehandle = fopen($fh, 'r+') or die("El archivo /var/RBAC_CONFIG.php no existe. Por favor, creelo he intente de nuevo.");
  		
  		// quitando las lineas que cambian
  		$arr = array_reverse($lines);
  		foreach($arr as $lineas){	
  			cutline($fh,$lineas); 
  		}
  		
		$file = fread($filehandle,filesize($fh));
		$to_w = $file;
		$i = 0;
		foreach($values as $vt => $value){
			$liness = explode("\n",$to_w);
			$liness[$lines[$i]-1] = $vt."='".$value."';\n";
			$to_w = implode("\n", $liness);
			rewind($filehandle);
			$i += 1;
		}
		fwrite($filehandle, $to_w);
		fclose($filehandle);
  	}

  	if ($_POST["database"]!= '' 
		&& $_POST["user"]!= ''
                    && $_POST["cypher"]!= ''
			&& $_POST["password"]!=''){
				$database = $_POST['database'];
				$user = $_POST['user'];
				$pass = $_POST['password'];
                                $cypherPass = $_POST['cypher'];
		}else{
			$url = 'installer.php?v=0';
			header('Location: '.$url);
		}
  
	
	// Creando la conexion con la Base de Datos
	if (!($link = mysql_connect('localhost', $user, $pass))) {
    	echo('No se pudo conectar con la Base de datos');
    	exit(0);
	}
	
	// Abriendo el archivo /var/RBAC_CONFIG.php y colocando
	// los valores de instalacion
	$ourFileName = "/var/RBAC_CONFIG.php";
	change_line($ourFileName,array(3,6,9,27),
		array("\$dbname"=>$database,"\$dbusername"=>$user,"\$dbpassword"=>$pass,"\$cypherPass"=>$cypherPass));	
	
	if(create_database($database,$link)){
		// Seleccionando la Base de Datos
		$db_selected = mysql_select_db($database, $link);
		if (!$db_selected) {
    		die ('Can\'t use foo : ' . mysql_error());
		}
				parse_mysql_dump('./db/schema/rbac_role-v1.sql');
				parse_mysql_dump('./db/schema/rbac_asignation-v1.sql');
                                parse_mysql_dump('./db/schema/rbac_permission-v1.sql');
				parse_mysql_dump('./db/schema/rbac_action-v1.sql');
				parse_mysql_dump('./db/schema/rbac_user-v1.sql');
				parse_mysql_dump('./db/schema/rbac_resource-v1.sql');
                                require_once("./AES.class.php");
                                $AES=new AES($cypherPass);
                                $md5password=md5($pass);
                                $aespassword=$AES->encrypt($md5password);
                                $aespassword=base64_encode($aespassword);
                                $sql="INSERT INTO `rbac_user` (`id`, `login`, `password`, `name`, `status`) VALUES ('1', '".$user."','".$aespassword."','',0)";
                                $result = mysql_query($sql)or die(mysql_error());
                
                
	}
	
	echo "<h2>Se realizo la operacion con exito</h2>";
	
	mysql_close($link);

?>
